package component.fy.com.common_module.utils;

import android.os.Build;
import android.os.Environment;
import android.os.StatFs;
import android.support.annotation.RequiresApi;

import java.io.File;

/**
 * SD卡操作工具类
 */
public class FileUtils {
//    <!-- 在SDCard中创建与删除文件权限 -->
//<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
//<!-- 往SDCard写入数据权限 -->
//<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
//    <!-- 从SDCard读取数据权限 -->
//    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

//    1、getExternalStorageState() 方法，返回String 获取外部存储设备的当前状态。
//    Environment.MEDIA_BAD_REMOVAL  表明SDCard 被卸载前己被移除
//    Environment.MEDIA_CHECKING  表明对象正在磁盘检查。
//    Environment.MEDIA_MOUNTED  表明对象是否存在并具有读/写权限
//    Environment.MEDIA_MOUNTED_READ_ONLY  表明对象权限为只读
//    Environment.MEDIA_NOFS   表明对象为空白或正在使用不受支持的文件系统。
//    Environment.MEDIA_SHARED  如果 SDCard 未安装 ，并通过 USB 大容量存储共享
//    Environment.MEDIA_UNMOUNTABLE  SDCard 不可被安装 如果 SDCard 是存在但不可以被安装
//    Environment.MEDIA_UNMOUNTED  SDCard 已卸掉如果 SDCard   是存在但是没有被安装
//    Environment.MEDIA_REMOVED  不存在 SDCard
//
//    2、getExternalStoragePublicDirectory(String type) 方法：返回 File ，获取一个公用的外部存储器目录（标准目录）来摆放某些类型的文件 。
//    Environment.DIRECTORY_MUSIC  音乐存放
//    Environment.DIRECTORY_PODCASTS  系统广播
//    Environment.DIRECTORY_RINGTONES  系统铃声
//    Environment.DIRECTORY_ALARMS  系统提醒铃声
//    Environment.DIRECTORY_NOTIFICATIONS  系统通知铃声
//    Environment.DIRECTORY_PICTURES  图片存放
//    Environment.DIRECTORY_MOVIES  电影存放
//    Environment.DIRECTORY_DOWNLOADS  下载
//    Environment.DIRECTORY_DCIM  相机拍摄照片和视频
//
//    3、getDataDirectory() 方法：返回 File ，获取 Android 数据目录。即data的目录(/data)
//    4、getDownloadCacheDirectory() 方法：返回 File ，获取 Android 下载/缓存内容目录。即(/cache)
//    5、getExternalStorageDirectory() 方法：返回 File ，获取外部存储目录即 SDCard  (/storage/sdcard)
//    6、getRootDirectory() 方法：返回 File ，获取 Android 的根目录 即系统主目录(/system)

    /**
     * SD卡是否存在
     *
     * @return
     */
    public static boolean ExistSDCard() {
        if (Environment.getExternalStorageState().equals(
                Environment.MEDIA_MOUNTED)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * SD卡剩余空间
     *
     * @return
     */
    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
    public static long getSDFreeSize() {
        // 取得SD卡文件路径
        File path = Environment.getExternalStorageDirectory();
        StatFs sf = new StatFs(path.getPath());
        // 获取单个数据块的大小(Byte)
        long blockSize = sf.getBlockSizeLong();
        // 空闲的数据块的数量
        long freeBlocks = sf.getAvailableBlocksLong();
        // 返回SD卡空闲大小
        // return freeBlocks * blockSize; //单位Byte
        // return (freeBlocks * blockSize)/1024; //单位KB
        return (freeBlocks * blockSize) / 1024 / 1024; // 单位MB
    }

    /**
     * SD卡总容量
     */
    @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
    public static long getSDAllSize() {
        // 取得SD卡文件路径
        File path = Environment.getExternalStorageDirectory();
        StatFs sf = new StatFs(path.getPath());
        // 获取单个数据块的大小(Byte)
        long blockSize = sf.getBlockSizeLong();
        // 获取所有数据块数
        long allBlocks = sf.getBlockCountLong();
        // 返回SD卡大小
        // return allBlocks * blockSize; //单位Byte
        // return (allBlocks * blockSize)/1024; //单位KB
        return (allBlocks * blockSize) / 1024 / 1024; // 单位MB
    }

    /**
     * 获取 Android 数据目录。即data的目录(/data)
     * @return
     */
    public static String getAppDataDir() {
        return Environment.getDataDirectory().getPath();
    }
}
